-- 1. 获取变量
local voucherId=ARGV[1]
local userId=ARGV[2]
local orderId=ARGV[3]

-- 2. 获取key(字符串拼接需要使用`..` 不能用`+`)
local stockKey='seckill:stock:'..voucherId
local orderKey='seckill:order:'..voucherId

-- 流程开始
-- 3. 判断库存是否充足
if(tonumber(redis.call('get',stockKey))<=0) then
-- 3.1. 库存不充足, 返回0
    return 1;
end

-- 3.2. 库存充足, 继续往下走
-- 4. 判断用户是否下单
if(redis.call('sismember',orderKey,userId)==1) then
    return 2;
end

-- 5. 扣减库存 incrby stockKey -1
redis.call('incrby',stockKey,-1);

-- 6. 将当前userId存入当前优惠券集合 sadd orderKey userId
redis.call('sadd',orderKey,userId)

-- 7. 发送到消息队列中, XADD stream.orders * k1 v1 k2 v2
-- 注: 需要先创建队列, 参考文档中的指令
redis.call('XADD','stream.orders','*','userId',userId,'voucherId',voucherId,'id',orderId)

return 0;